Skip Headers

Oracle® OLAP DML Reference 10g Release 2 (10.2) Part Number B14346-01 |
Home | Book List | Contents | Index | Master Index | Feedback

Previous | Next
| View PDF

# LIMIT command

The LIMIT command sets the current status list of a dimension and its dimension surrogates, or assigns values to a valuesets the current status list of a dimension and its dimension surrogates, or assigns values to a valueset. You use LIMIT to restrict the data values you are working on by temporarily limiting the range of the dimensions of the data. Using LIMIT, you create a current status list for a dimension. The current status list of a dimension is an ordered list of currently accessible values for the dimension. Values that are in the current status list of a dimension are said to be "in status." For more information on dimension status and its importance when working with analytic workspace data, see "Limiting Dimension Values Directly in an Expression".

Tip: You set the current status list of one or more base dimensions of a composite, conjoint dimension, concat dimension, or a partition template based on the selected values of that object, see LIMIT BASEDIMS.

Syntax

LIMIT {dimension | valueset} [concat-component] limit-type [limit-clause] [IFNONE label]

where limit-type is one of the following keywords that specify how Oracle OLAP should modify the current status list:

  TO
  ADD
  INSERT [FIRST|LAST|BEFORE position|AFTER position]
  KEEP
  REMOVE
  KEEP REORDER
  COMPLEMENT
  SORT [NAFIRST]

Arguments

dimension

  The name of the dimension or dimension surrogate for which you are setting status.

valueset

  The name of the valueset for which you are assigning values.

concat-component

  Specifies the name of the component of the concat dimension whose values are used to determine the limit. When you specify a value for concat-component, the limit sets the status of the specified concat dimension using the values of dimension which is a component of the concat dimension. This limit-clause applies only when dimension is a concat dimension. The status of a concat dimension and of its component dimensions are not shared. Changing the status of a component dimension after you have used that dimension as the limit-clause in setting the status of a concat dimension does not change the status of the concat dimension.

TO

  Replaces the status of a dimension or valueset with the values specified by the limit-clause arguments. The TO keyword selects values from the default status of a dimension in the same order as they appear in the LIMIT statement or in the order implied by the valuelist argument. When you use arguments that imply ordering, the ordering of the values is based on their positions in the default status.

ADD

  Expands the status of a dimension or valueset by adding the values specified by the limit-clause arguments that are not already in status. The ADD keywords selects values from the default status of a dimension in the same order as they appear in the LIMIT statement or in the order implied by the valuelist argument. When you use arguments that imply ordering, the ordering of the values is based on their positions in the default status. ADD adds unique dimension values in the specified order at the end of the current status list or valueset list.

INSERT

  Expands the status of a dimension or valueset by inserting the values specified by the limit-clause arguments in a specified position in the current status. The INSERT keyword selects values from the default status of a dimension in the same order as they appear in the LIMIT statement or in the order implied by the valuelist argument.

  When you use arguments that imply ordering (for example,`value1` `TO` `value2`), the ordering of the values is based on their positions in the default status. INSERT adds values to a specified position in the current status. When an added value is already in status, it is removed from its position in the current status and added in the order in which it appears in the valuelist, preserving the order of the added values.

FIRST

  Inserts the new values before the first value in status.

LAST

  Inserts new values after the last value in status.

BEFORE
AFTER

  Specifies whether new values Oracle OLAP inserts new values before or after position in the current status.

position

  A dimension value in the current status, a character expression whose value is a dimension value in the current status, or an `INTEGER` expression whose value represents the position of a dimension value in the default status.

KEEP

  Reduces the status of a dimension or valueset by keeping only the values specified by the limit-clause arguments. Oracle OLAP performs the selection based on the current dimension status. KEEP preserves the current order of values among the values that remain in the status.

KEEP REORDER

  Like a simple KEEP, KEEP REORDER reduces the status of a dimension or valueset by keeping only the values specified by the limit-clause arguments. Oracle OLAP performs the selection based on the current dimension status. However, KEEP REORDER orders the result in the order of the selection arguments (that is, the limit-clause arguments) rather than by the current status order.

REMOVE

  Reduces the status of a dimension or a valueset by removing the values specified by the limit-clause arguments. Oracle OLAP performs the selection based on the current dimension status. KEEP preserves the current order of values among the values that remain in the status.

COMPLEMENT

  Replaces the status of a dimension or valueset with the values that are not specified by the limit-clause arguments. When you do not specify any arguments after COMPLEMENT, status is replaced by all values not now in status. Oracle OLAP performs the selection based on the current dimension status. COMPLEMENT leaves dimension values that remain in their default order. (Abbreviated COMP)

SORT

  Sorts the values of a dimension or valueset according to the limit-clause arguments. LIMIT creates a temporary list of values based on the limit-clause arguments, and uses this list to sort the current status list. Any values not present in the temporary list are moved to the end of the current status list.

NAFIRST

  Specifies that `NA` values are placed first in the sort list rather than last.

limit-clause

  Specifies the values to use for the limit. There are several types of limit clauses. Because the complete syntax for each type of limit clause is complex, subsequent entries discuss the LIMIT command with each type of clause:

    LIMIT command (using values)
    LIMIT command (using LEVELREL)
    LIMIT command (using related dimension)
    LIMIT command (using parent relation)
    LIMIT command (NOCONVERT)
    LIMIT command (using POSLIST)
IFNONE

  (For use only within an OLAP DML program) Specifies that program execution should branch to label when the requested status has null status or is based on a related dimension that turns out to have null status (that is, to have no values). In either case, the null status is not put into effect when program execution branches. Instead, the original status, before the LIMIT statement was executed, is retained. This is true even when OKNULLSTATUS is `YES`. Within an OLAP DML program, you cannot use both IFNONE and NULL in the same statement.

label

  The name of a label elsewhere in the program constructed following the "Guidelines for Constructing a Label". Execution of the program branches to the line directly following the specified label.

  Note that label, as specified in IFNONE, must not be followed by a colon. However, the actual label elsewhere in the program must end with a colon.

Notes

Specifying a Value of a Concat Dimension

To specify a value of a nonunique concat dimension, use the following syntax.

<base-dimension: value>.

Default Status List

When you first attach an analytic workspace, the current status list of each dimension consists of all of the values of the dimension that have read permission, in the order in which the values are stored. This list of values is called the default status list for the dimension.

Unique Values

LIMIT selects only unique values of a dimension. When a value appears more than once in a LIMIT statement, it is placed in status in the order of its first appearance. For example, the following lines.

    LIMIT time TO 'Jan97', 'Feb97', 'Jan97'
    STATUS time

produce this output.

    The current status of TIME is:
    JAN97, FEB97

Nonexistent Values

Oracle OLAP does not signal an error when you try to set the status of a dimension or valueset that has no values, unless you explicitly list values that do not exist. For example, assume that you have not added any values to a newly defined dimension WEEK. In this case, the statement `LIMIT week TO FIRST 10` does not cause an error. However, `LIMIT week TO 'Pete'` causes an error because `Pete` is not a value. Similarly, `LIMIT week TO 20` causes an error because `week` does not have a value at position `20`.

Setting the Status of a Dimension or Valueset to Null

Oracle OLAP allows the status of a dimension or valueset to be set to null (empty status) only when you have explicitly specified that you want null status to be permitted. You can give this permission in either of two ways:

- Set the OKNULLSTATUS option to `YES`. This specification indicates that null status should be allowed whenever it occurs (except when the IFNONE argument is present in a LIMIT statement).

- Use the NULL keyword in a LIMIT statement to set the status of a particular dimension or valueset to null. You can do this by specifying TO NULL or KEEP NULL. This specification indicates that null status should be allowed for this LIMIT statement only.

When you have not used either of these two methods to give permission for null status and you execute a LIMIT statement that would result in null status, Oracle OLAP does not change the status to null when it executes the statement. Instead, Oracle OLAP leaves the status as it was before the statement was issued and either signals an error (when IFNONE is not present) or branches to the IFNONE label (when IFNONE is present).

An IFNONE argument indicates that you do not want program execution to take its normal course when a dimension's status were to be set to null. Therefore, when IFNONE is present, Oracle OLAP branches to the IFNONE label and does not set the status to null, even when OKNULLSTATUS is `YES`. When the NULL keyword is present together with IFNONE, Oracle OLAP signals the inconsistency with an error.

IFNONE requires the use of unstructured programming techniques. Oracle OLAP now provides alternative structured techniques, so the use of IFNONE is discouraged. IFNONE has been retained for compatibility with previous versions of Oracle OLAP.

Limiting a Conjoint

To limit a conjoint dimension to a value list, you can use the following constructions:

- Specify the actual values, surrounding each combination with angle brackets

      LIMIT proddist TO '<Tents, Boston>' -
         '<Footwear, Denver>'

- Use a variable name for the values, surrounding the combination with angle brackets.

      prodname = 'Canoes'
      distname = 'Seattle'
      LIMIT proddist To <prodname, distname>

- Create a multiline list, where each line is a combination surrounded by angle brackets.

      namelist = '<Tents Boston>\n<Footwear, -
         Denver>\n <Canoes, Seattle>'
      LIMIT proddist TO namelist

- Use the implicit relation between a conjoint dimension and its base dimension to limit the conjoint dimension. For example, use the following statement to limit PRODDIST to all conjoint values having "Canoes" as one of its base values.

      LIMIT proddist TO product 'Canoes'

  Note: You can use logical position numbers for base dimension values in a conjoint dimension. "Using INSTAT When the Dimension is a Conjoint Dimension" illustrates using logical position numbers

For an example of how you can limit a conjoint dimension that has a concat base dimension, see Example 16-13, "Limiting a Conjoint Dimension with a Concat Base Dimension".

Limiting a Concat

You can define a concat dimension using simple dimensions, conjoint dimensions, and other concat dimensions as the base dimensions of the concat. The syntax for limiting a concat dimension to one of its values is the following.

LIMIT concatdim TO <base-dim: value>

For example, the concat dimension `reg.dist.ccdim` has the simple dimensions `region` and `district` as its base dimensions. The following statement sets the status of `reg.dist.ccdim` to two of its values, `region: East` and `district: Atlanta`.

    LIMIT reg.dist.ccdim TO <region: 'East'> <district: 'Atlanta'>

For other methods of setting the status of a concat dimension, see Example 16-4, "Limiting a Concat Dimension".

Alternative to Branching Using an IFNONE Label

As an alternative to branching to an `IFNONE` label, you can also handle null status for a dimension with the OKNULLSTATUS option. When you set OKNULLSTATUS to `YES`, then you are allowed to set the status of a dimension to null. You can then check for null status and execute appropriate commands with an IF...THEN...ELSE statement, or you can handle null status as one of the cases in a SWITCH statement.

    OKNULLSTATUS = YES
    LIMIT month TO sales GT salesnum
    IF STATLEN(month) LT 1
       THEN GOTO showerr

Examples

Example 16-2 Adding and Removing Values

These lines add values to the status for the `month` dimension.

    LIMIT month TO 'Jan96' TO 'Jun96'
    LIMIT month ADD 'Jul96' 'Sep96'

Issuing a `STATUS month` statement produces this output.

    The current status of MONTH is:
    Jan96 TO Jul96, Sep96

This line removes values from the status for the `month` dimension.

    LIMIT month REMOVE 'Jan96' TO 'Mar96'

Now, issuing a `STATUS month` statement produces this output

    The current status of MONTH is:
    Apr96 TO Jul96, Sep96

Example 16-3 Limiting with a Dimension Surrogate

A dimension and any dimension surrogates for it share the same status.

For example, assume that there is a `NUMBER` dimension named `store_id` that has the values `25`, `410`, `150`, `205`, `310`, and `10`. It also uses `storepos`, an INTEGER dimension surrogate for `store_id`. The dimension surrogate `storepos` has the values `1`, `2`, `3`, `4`, `5`, and `6`. A TEXT dimension surrogate for `store_id` is `storename`. It has the text values `Raoul's - Boston`, `Poldy's Potpourri`, `Molly's Emporium`, `Raoul's - Atlanta`, `Kinch's Kitchen Supplies`, and `Raoul's - Chicago`. The following statements are equivalent.

    LIMIT store_id TO 25 410 150
    LIMIT store_id TO storepos 1 2 3
    LIMIT storepos TO 1 TO 3
    LIMIT storepos TO first 3
    LIMIT storename TO first 3
    LIMIT storename TO 'Raoul\'s - Boston' TO 'Molly\'s Emporium'
    LIMIT store_id TO storename storepos 1 2 3
    LIMIT storename TO store_id 25 TO 150

The following statements set the status of the `store_id` dimension by limiting `storename`, which is a TEXT dimension surrogate for `store_id`, and report the values of `store_id`.

    LIMIT storename TO 'Raoul\'s Sweets' TO 'Henry\'s Flowers'
    REPORT store_id

The preceding statement produces the following output.

    STORE_ID
    --------------
    10
    20
    30

Example 16-4 Limiting a Concat Dimension

In the following examples, the concat dimension `reg.dist.ccdim` has the simple dimensions `region` and `district` as its base dimensions. A concat dimension has an implicit relation to each of its component dimensions.

- The following statement sets the status of the concat dimension using the related dimension syntax and specifying the positions of the component (related) dimension.

      LIMIT reg.dist.ccdim TO district 1, 4, 5

  Issuing a `STATUS reg.dist.ccdim` statement produces the following output.

      The current status of REG.DIST.CCDIM is:
      <DISTRICT: BOSTON>, <DISTRICT: DALLAS>, <DISTRICT: DENVER>

- The following statement limits the concat dimension directly to the values specified by positions of the concat dimension.

      LIMIT reg.dist.ccdim TO 1, 4, 5

  Issuing a `STATUS reg.dist.ccdim` statement produces the following output.

      The current status of REG.DIST.CCDIM is:
      <REGION: EAST>, <DISTRICT: BOSTON>, <DISTRICT: ATLANTA>

- The following statements set the status of `district` and then limit `reg.dist.ccdim` to the status of `district`.

      LIMIT district TO LAST 3
      LIMIT reg.dist.ccdim TO district

  Issuing a `REPORT reg.dist.ccdim` statement produces the following output.

      REG.DIST.CCDIM
      ----------------------
      <district: Dallas>
      <district: Denver>
      <district: Seattle>

- In the following statement, the limit-clause argument is a list of values of the concat dimension.

      LIMIT reg.dist.ccdim TO <region: 'East'> <district:  'Boston'> <district: 'Atlanta'>

- The following statements define a valueset for `reg.dist.ccdim`, store the current status of the concat dimension in the valueset, reset the status of the concat to `ALL`, and then limit the concat to the valueset and report the values of the concat in status.

      DEFINE regdist.vset VALUESET reg.dist.ccdim
      LIMIT regdist.vset TO reg.dist.ccdim
      LIMIT reg.dist.ccdim TO ALL
      LIMIT reg.dist.ccdim TO regdist.vset
      RPR W 22 reg.dist.ccdim

  The preceding statements produce the following result.

      REG.DIST.CCDIM
      ----------------------
      <region: East>
      <district: Boston>
      <district: Atlanta>

You can also limit a concat dimension using a valueset of one of its component dimensions:

- When the component dimensions contain identical values, you can limit the concat dimension to those values by using a Boolean expression. When the `district` and `region` dimensions both have `New` `York` as a value, then the following statement limits the `reg.dist.ccdim` to those values.

      LIMIT reg.dist.ccdim TO BASEVAL(reg.dist.ccdim) EQ 'New York'

- In the following example, the concat dimension `geog` has the simple dimension `region` and the conjoint dimension `cityandstate` as its base dimensions. The following statement sets the status of the concat dimension by limiting the conjoint base dimension.

      LIMIT geog TO cityandstate <'Princeton' 'New Jersey'> -
         <'Patterson' 'New Jersey'>

  Issuing a `STATUS geog` statement produces the following output.

      The current status of GEOG is:
      <CITYANDSTATE: <PRINCETON, NEW JERSEY>, <CITYANDSTATE: <PATTERSON, NEW JERSEY>>

- The following statements sets the status of the concat dimension by limiting the conjoint base dimension by specifying a value of a base dimension of the conjoint dimension.

      LIMIT geog TO cityandstate city 'Princeton'
      RPR W 30 geog

  The preceding statement produces the following output.

      GEOG
      ------------------------------
      <cityandstate: <Princeton, New Jersey>>
      <cityandstate: <Princeton, Indiana>>

Example 16-5 Limiting with a Worksheet

This example shows how to limit a dimension to the values that are contained in a column of a worksheet. Here the dimension `month` is limited to the values that are contained in the first column of the worksheet `workitem`. The following statements produce a `workitem` report, which is shown following the statements.

    LIMIT month TO ALL
    LIMIT wkscol TO 1
    LIMIT wksrow TO workitem NE NA
    REPORT workitem
                   -WORKITEM-
                   --WKSCOL--
    WKSROW             1
    -------------- ----------
                 1 Jan96
                 2 Feb96
                 3 Mar96
                 4 Apr96
                 5 May96
                 6 Jun96
                 7 Jul96
                 8 Aug96
                 9 Sep96
                10 Oct96
                11 Nov96
                12 Dec96

The following statement limits the `month` dimension to the values that are listed in the first column of `workitem`.

    LIMIT month TO CHARLIST(workitem)

Issuing a `STATUS month` statement produces the following output.

    The current status of MONTH is:
    Jan96 TO Dec96

Example 16-6 Using Ampersand Substitution with LIMIT

Assume that you want specify exactly two products for a program named `product.rpt`. In this cae, you could declare two dimension-value arguments to handle them. But when you want to be able to specify any number of products using LIMIT commands, then you can use a single argument with ampersand substitution.

Suppose you use the following commands in your program.

    ARGUMENT natext TEXT
    ARGUMENT widthamt INTEGER
    ARGUMENT rptprod TEXT
        ...
    LIMIT product TO &rptprod

You can run the program and specify that you want the first three products in the report.

    CALL product.rpt ('Missing' 8 'first 3')

The single quotation marks are necessary to indicate that "first 3" should be taken as a single argument, rather than two separate arguments separated by a space. The ampersand causes the LIMIT command to interpret `'first 3'` as a keyword expression rather than as a dimension value.

Example 16-7 Branching on Null Status

Your program might try to set or refine the status of the `product` dimension to include only the products for which unit sales are greater than 500. When no products have unit sales of more than 500, then you can use the `IFNONE` keyword to specify that execution branch to the `novals` label.

    LIMIT product KEEP units GT 500 IFNONE novals

In the commands following the `novals` label, you can handle the special situation in which no products have units sales greater than 500.

## LIMIT command (using values)

A LIMIT command with a using values limit clause assigns values to a valueset or sets the current status list of a dimension or dimension surrogates to:

- Specified value or values. The values can be any of the following:

  - Dimension values, expressed as literal values separated by commas, or as a multiline text expression, each line of which is a value of the dimension.

  - Ranges of dimension values, expressed as value1 TO value2.

  - Integer values that represent the logical positions of dimension values, expressed as comma-delimited `INTEGER` values.

  - Ranges of INTEGER values that represent the logical positions of dimension values, expressed as value1 TO value2.

  - Valuesets.

- Values for which a Boolean expression is `TRUE`.

- The top or bottom performers of a dimension based on a criterion

- The top or bottom performers of a dimension, by percentage, based on a criterion represented as an expression

Syntax

LIMIT {dimension | valueset} [concat-component] limit-type -

{inclusive-val-args....| exclusive-val-args} [IFNONE label]

where:

- inclusive-val-args is one or more of the following constructs:

  intvaluelist
  text-expression
  value1 TO value2
  valuelist
  valueset

- exclusive-val-args is one of the following constructs:

  ALL
  boolean-expression
  {BOTTOM|TOP} n BASEDON expression
  {BOTTOM|TOP} n-percent PERCENTOF expression
  {FIRST|LAST|NTH} n
  LONGLIST
  LONGLIST
  SESSION
  NULL

Arguments

dimension

  The name of the dimension or dimension surrogate for which you are setting status.

valueset

  The name of the valueset for which you are assigning values.

concat-component

  The name of the component of the concat dimension whose values are used to determine the limit. (See the main entry for LIMIT command for complete description of this argument.)

limit-type

  A keyword that specifies how Oracle OLAP should modify the current status list. (See the main entry for LIMIT command for a list and descriptions of these keywords.)

intvaluelist

  A list of one or more `INTEGER` values, or the name of a single-cell variable that holds a numeric value. Separate the values with commas (`,`). Numeric values with decimal places (SHORTDECIMAL or DECIMAL values) are automatically truncated to `INTEGER` values before being used as dimension values. An `INTEGER` specifies a dimension value by its logical position in the full set of dimension values. You cannot specify a `NUMBER` dimension value by an `INTEGER` position. When the values of the `NUMBER` dimension are `INTEGER` values, then you can set the status of the dimension by specifying dimension values, as in intvalue1, intvalue2 and so on.

text-expression

  A multiline text expression, each line of which is a value of dimension.

value1 TO value2

  Specifies a range of dimension values where value1 and value2 can be either dimension values or `INTEGER` values. Such a range can be increasing (for example, 1 to 10) or decreasing (for example, 10 to 1). The status of the dimension or valueset is assigned accordingly. You cannot specify the values of a `NUMBER` dimension by using INTEGER positions. Instead, you can define an `INTEGER` dimension surrogate for the `NUMBER` dimension and limit the dimension by the positions of the surrogate.

valuelist

  A list of one or more values of dimension. A dimension value can be specified as a text expression whose value is a valid dimension value. For a `NUMBER` dimension, dimension values are numbers. For dimensions with a type of DAY, WEEK, MONTH, QUARTER, or YEAR, dimension values can also be specified as `DATE` expressions.

valueset

  An analytic workspace valueset object that is a saved list that holds the values for the dimension whose status is being set. You cannot define a valueset for a dimension surrogate, therefore you cannot specify a valueset when setting the status of a dimension surrogate. However, when you limit a dimension with a valueset, then you automatically limit to the same set any dimension surrogates of that dimension.

ALL

  Specifies that all dimension values in the default status are to be included in the status. The default status is made up of all dimension values for which read permission is granted, in the same order as when the dimension was last maintained. When you start up an analytic workspace, the status for each dimension in your analytic workspace is the default status. Changing the read permission for a dimension with PERMIT or PERMITRESET statement changes the default status for the dimension.

boolean-expression

  An expression whose TRUE values are used by Oracle OLAP when limiting the dimension or status. The boolean-expression must be dimensioned by the dimension whose status is being set. For a dimension surrogate, the Boolean expression is evaluated over the dimension for which it is a surrogate. The data types of the expressions you are comparing in the Boolean expression must be similar. See the CONVERT function for information on converting data types. To correctly use LIMIT with a Boolean expression you need to understand how it works with a Boolean expression that has with more than one dimension, see "How LIMIT Handles Boolean Expressions With More Than One Dimension" for details.

BOTTOM n BASEDON expression
TOP n BASEDON expression

  Specifies that the status of a dimension or valueset is set based on a criterion, where n is the number of values to select and expression is the criterion on which to base the selection. All dimensions of expression other than the one whose status is being set must be limited to a single value. TOP results in the status sorted in descending order, BOTTOM results in the status sorted in ascending order. You cannot use a composite after the BASEDON keyword. When you attempt to do so, an error message will be displayed.

BOTTOM n-percent PERCENTOF expression
TOP n-percent PERCENTOF expression

  Specifies that the status of a dimension or valueset is set by finding the top or bottom performers based on a criterion represented as an expression. This construction sorts values and adds them to the status that is based on their contribution, by percentage, to an expression.

  For example, the following statement sorts products in descending order by each product's contribution to `TOTAL(sales)` and then add values to the status, starting from the top, until the cumulative total of `sales` by `product` reaches or exceeds 30 percent of all sales.

      LIMIT product TO TOP 30 PERCENTOF TOTAL(sales, product)

  Important: Do not use a criterion expression that causes a side effect or changes its own value.

FIRST n
LAST n
NTH n

  Specifies the first n, last n or nth values in the dimension's full set of values when used with TO, ADD, COMPLEMENT, or INSERT. When used with KEEP or REMOVE, specifies the first n, last n or nth values in the current status.

  Important: It can happen that the last item in status, based on a PERCENTOF criterion, is one of a number of dimension values having the same associated criterion value. In this case, LIMIT includes all dimension values with that criterion value in the resulting status, even when that causes the total of the criterion value to far exceed the specified percentage.

LONGLIST

  Indicates that there can be up to 2,000 arguments in the LIMIT statement. When there are less than 300 arguments, LONGLIST is not needed.

SESSION

  Specifies that Oracle OLAP use only those dimension members that were created using a MAINTAIN ADD SESSION statement when performing the limit.

STATUS

  Specifies that Oracle OLAP use the values that are presently in status when performing the limit. Specifying this keyword is equivalent to (but more efficient than) using a VALUES (dimname) statement.

NULL

  Indicates an empty dimension or valueset list. Using this keyword with the TO or KEEP arguments removes all values from the current status, leaving an empty dimension or valueset list, even when OKNULLSTATUS is `NO`. You cannot use IFNONE and NULL in the same LIMIT statement. ADD, INSERT, and REMOVE NULL leave status unchanged. COMPLEMENT NULL places all values in status.

IFNONE label

  Specifies that program execution should branch to label when the requested status has null status or is based on a related dimension that turns out to have null status (that is, to have no values). (See the main entry for LIMIT command for complete description of this phrase.)

Notes

Considerations When Specifying Values

Keep the following points in mind when specifying values in limit-clause:

- The setting of the LIMITSTRICT option determines how Oracle OLAP behaves when a list of values in a LIMIT command, a LIMIT function, or a QDR contains a nonexistent value. By default, when you specify a nonexistent value, Oracle OLAP treats the nonexistent value as an invalid value and stops executing the limit and issues an error. If, instead, you want Oracle OLAP to treat a nonexistent value as an `NA` value, set the value of LIMITSTRICT to `NO`.

- You can embed a quoted string within a quoted string, which is necessary when there are special characters in a base dimension value of a composite or conjoint dimension, such as `Joe's Deli`. See the "Using a Single Quotation Mark Within a Text Value".

- When the dimension has the NTEXT data type and an argument that represents a dimension value has the TEXT data type, LIMIT converts the argument value to NTEXT. Similarly, when the dimension has the TEXT data type and an argument that represents a dimension value has the NTEXT data type, LIMIT converts the argument value to TEXT; however, in this case, the conversion can result in data loss when the NTEXT value cannot be represented in the database character set.

- When you specify a value of a dimension with a type of DAY, WEEK, MONTH, QUARTER, or YEAR, the value can be in the format specified by the VNF (value name format) for the dimension (or in the default VNF for the type of dimension you are limiting when the dimension does not have a VNF) or in a valid input style for DATE values.

  You only need to provide the date components that are relevant for the type of dimension you are limiting. For a DAY or WEEK dimension, you must supply the day, month, and year components. For a MONTH or QUARTER dimension, you only need to supply the month and year (for example, `Jun95` or `0695` for June 1995). For a YEAR dimension, you only need to specify the year (for example, `95` for 1995). The valid input styles for dates are discussed in DATEORDER.

  When you specify a DATE expression or a text value that represents a complete date, you can specify any date that falls within the time period that is represented by the desired dimension value. Oracle OLAP uses the DATEORDER option to resolve any ambiguities.

How LIMIT Handles Boolean Expressions With More Than One Dimension

In the following LIMIT statement, the `sales` variable is dimensioned by three dimensions: `product`, `district`, and `month`.

    LIMIT product TO sales GT 90000

The result of the previous LIMIT statement is evident when the `district` and `month` dimensions are limited to a single value, as they are when you execute these statements.

    LIMIT month TO 'Jan95'
    LIMIT district TO 'Boston'
    STATUS product

The STATUS statement produces the following output.

    The current status of PRODUCT is:
    Footwear

In this case, the resulting status is all of the products whose sales exceed $90,000 for the month of January 1995 in the Boston district, which is only Footwear.

Consider the following example in which the MONTH dimension is not limited to a single value.

    LIMIT product TO ALL
    LIMIT month TO 'Jan95' 'Feb95' 'Mar95'
    LIMIT district TO 'Boston'

When you execute a REPORT `sales` statement, you can see the BOSTON sales figures for three months.

    DISTRICT: BOSTON
                   -------------SALES--------------
                   -------------MONTH--------------
    PRODUCT          Jan95      Feb95      Mar95
    -------------- ---------- ---------- ----------
    Tents           32,153.52  32,536.30  43,062.75
    Canoes          66,013.92  76,083.84  91,748.16
    Racquets        52,420.86  56,837.88  58,838.04
    Sportswear      53,194.70  58,913.40  62,797.80
    Footwear        91,406.82  86,827.32 100,199.46

However, the following LIMIT and STATUS commands produce the output shown following them. Again, only Footwear is in the status for `month`.

    LIMIT product TO sales GT 90000
    STATUS product

    The current status of PRODUCT is:
    Footwear

In this case, each product has three sales figures, one for each month. For each product, LIMIT evaluates the sales data for only the first month in status. A product is added to the status when its sales data exceeds $90,000 in that month.

When you would like all months evaluated for each product, you can use the EVERY, ANY, or NONE functions. For example, the following LIMIT statement adds a product to the status when any of its months has a sales figure that exceeds $90,000.

    LIMIT product TO ANY(sales GT 90000, product)

In this case a `STATUS product` statement produces the following output.

    The current status of product is:
    Canoes, Footwear

Limiting Using Implicit Relations

Every dimension with a type of DAY, WEEK, MONTH, QUARTER, or YEAR is related to all other dimensions of this type through an implicit relation. When you limit the values of one DAY, WEEK, MONTH, QUARTER, or YEAR dimension by specifying another DAY, WEEK, MONTH, QUARTER, or YEAR dimension as the related-dimension, Oracle OLAP uses the implicit relation by default. However, when an explicit relation is defined between the two of these types of dimensions, you can override the default by specifying the name of the explicit relation as the related-dimension. For example, you can issue the following statement.

    LIMIT month TO quarter year

This statement temporarily limits `quarter` to `year`, then limits `month` to `quarter`, and finally, restores `quarter` to its original status.

Examples

Example 16-8 Limiting with a Literal Value

This example shows how to limit the status of a dimension to one or more values (the value1, value2 construction of valuelist).

    LIMIT month TO 'Jan96'

Example 16-9 Limiting with a Boolean Expression

You can limit a dimension or valueset according to the values of a Boolean expression. In this example, the values of the TOTALL function are broken out by `product` and compared to a constant. The LIMIT statement sets the status to all the products whose sales, totaled for all months and districts, are greater than 12 million.

    LIMIT product TO TOTAL(sales product) GT 12000000

Example 16-10 Limiting with a Formula

When you use the same criterion frequently to limit a dimension, you can save the expression as a formula and use the name of the formula as the limit expression.

    DEFINE criterion FORMULA TOTAL(sales product) GT 12000000
    LIMIT product TO criterion

Example 16-11 Limiting with a Valueset

You can save a status list in a valueset and use those values later to limit the status. When it takes several LIMIT commands to produce the status list you want, the valueset keeps you from having to repeat those LIMIT commands each time you need the same list. The following statements limit `district` to the districts in which sportswear sales exceeded $1,000,000 in 1996. The status is saved in the valueset `sports.district`, and you can limit `district` to the same list with one LIMIT statement.

    DEFINE sports.district VALUESET district
    LIMIT product TO 'Sportswear'
    LIMIT month TO year 'Yr96'
    LIMIT sports.district TO TOTAL(sales district) GT 1000000
    LIMIT district TO sports.district

Issuing a `STATUS district` statement produces this output.

    The current status of DISTRICT is:
    ATLANTA TO DENVER

Example 16-12 Limiting with a Variable

Here the TOP and BASEDON keywords are used to limit the status of a dimension, using the values of a variable as a criterion. The status list is sorted in descending order according to the values of `sales`.

    LIMIT product TO 'Sportswear'
    LIMIT month TO 'Jul96'
    LIMIT district TO TOP 2 BASEDON sales

The following REPORT statement

    REPORT DOWN district sales

produces this output, which shows the results of the LIMIT commands.

    PRODUCT: SPORTSWEAR
                   --SALES---
                   --MONTH---
    DISTRICT         Jul96
    -------------- ----------
    Dallas         220,416.81
    Atlanta        211,666.14

Example 16-13 Limiting a Conjoint Dimension with a Concat Base Dimension

Assume that your analytic workspace contains a conjoint dimension named `prod.regdist` that has the `product` simple dimension and the `reg.dist.ccdim` concat dimension as its base dimensions. The conjoint dimension `prod.regdist` has the following values.

    Tents   <region: East>
    Tents   <region: West>
    Canoes  <region: East>
    Canoes  <region: West>
    Tents   <district: Boston>
    Tents   <district: Atlanta>
    Tents   <district: Denver>
    Canoes  <district: Atlanta>
    Canoes  <district: Seattle>

There are two different ways that you can set the status of a conjoint dimension that has a concat dimension as a base dimension:

- By specifying the concat dimension, one of its component dimensions, and a value of the component dimension. The following LIMIT statement sets the status of `prod.regdist` in this manner.

      LIMIT prod.regdist TO reg.proddist.ccdim district 'Atlanta'
      RPR W 20 prod.regdist

  The preceding statement produces the following output.

      --------------PROD.REGDIST---------------
            PRODUCT           REG.DIST.CCDIM
      -------------------- --------------------
      Tents                <district: Atlanta>
      Canoes               <district: Atlanta>

- You can also set the status of the conjoint by specifying its values. The following LIMIT statement sets the status of `prod.regdist` in this manner.

      LIMIT prod.regdist TO <'Tents' '<region: East>'> <'Tents' '<district: Boston>'>
      RPR W 20 prod.regdist

  The preceding statement produces the following output.

      --------------PROD.REGDIST---------------
            PRODUCT           REG.DIST.CCDIM
      -------------------- --------------------
      Tents                <region: East>
      Tents                <district: Boston>

## LIMIT command (using LEVELREL)

A LIMIT command that uses only dimension values that are at the same level as the current level of the hierarchical dimension or dimension surrogate when setting status or assigning values to a valueset.

Syntax

LIMIT {dimension | valueset} [concat-component] limit-type-

LEVELREL level-relation-clause [IFNONE label]

where the syntax of level-relation-clause varies depending on the dimensionality of the object you want to specify:

- To specify a level relation which is multidimensional you must use the following syntax:

  RELATION level-relation-name [QUALIFY relation-dimension-name [inclusive-val-args...]...]

  (You can also use this syntax when the level relation is one-dimensional.)

- To specify a level relation which is one-dimensional, you can use the following simplified syntax:

  level-relation-name [valueset2]

Arguments

dimension

  The name of the dimension or dimension surrogate for which you are setting status.

valueset

  The name of the valueset for which you are assigning values.

concat-component

  The name of the component of the concat dimension whose values are used to determine the limit. (See the main entry for LIMIT command for complete description of this argument.)

limit-type

  A keyword that specifies how Oracle OLAP should modify the current status list. (See the main entry for LIMIT command for a list and descriptions of these keywords.)

LEVELREL

  Sets the status of a hierarchical dimension to all of the values of the hierarchical dimension that are at the same level as the current value of the dimension; or, that limits a hierarchical dimension to those values of the hierarchical dimension that are at the same level as the current value of the dimension and that are also in a specified valueset.

RELATION

  Specifies that Oracle OLAP performs the limit based on the values of the relation specified by level-relation-name. This keyword must be specified if level-relation-name is a multidimensional relation.

level-relation-name

  Specifies the name of a level relation for the hierarchical dimension you want to limit. A level relation is a relation between a hierarchical dimension and another dimension (sometimes called the level dimension) that has the names of the levels of the hierarchy as values. A level relation is dimensioned by the hierarchical dimension and has the values of the level dimension. For example, assume that there is hierarchical TEXT dimension named `time`, a level dimension for `time` named `tlevels`, and a level relation named `time.tlevels` that is dimensioned by `time`. Assume also that the `time` dimension has a unique value for months and years and the `tlevels` dimension has two values `Month` and `Year.` In this case, for each month value (for example, `Feb 97`), the `time.tlevels` relation has a value of `Month`; and, for each year value (for example, `1997`), the `time.tlevels` relation has a value of `Year`.

QUALIFY relation-dimension-name [inclusive-val-args]

  Identifies the values by which Oracle OLAP performs the limit.

  - relation-dimension-name is the name of a dimension of the relation specified by level-relation-name.

  - inclusive-val-args specifies the values of relation-dimension-name to use when determining the values of level-relation-name by which to perform the limit. You can specify any inclusive valuelist argument as described in the syntax of the inclusive-val-args argument for the valuelist clause for LIMIT command (using values). When you omit this argument, Oracle OLAP uses the current status of the dimension when performing the limit.

valueset2

  Specifies the name of a valueset object is dimensioned by the level dimension for the hierarchical dimension that you want to limit. Assume that there are the objects described in the description of the level-relation parameter. Additionally, assume that you have defined a valueset named `bestsalesyear` that is dimensioned by `tlevels` and, for each value, contains only the values of `time` that pertain to the year with the best sales year (for example, `1998`). In this case, for `Month`, `bestsalesyear` would have a list of all of the months in 1998 (that is, `Jan98` through `Dec98` and for `Year` would have only one value (`1998`).

IFNONE label

  Specifies that program execution should branch to label when the requested status has null status or is based on a related dimension that turns out to have null status (that is, to have no values). (See the main entry for LIMIT command for complete description of this phrase.)

Examples

Example 16-14 Limiting to a Single Time Period of a Hierarchical Time Dimension

Assume that you have defined a hierarchical text dimension named `time`, a level dimension named `timelevels` that has `Month` and `Year` as values, and a relation named `timelevelsrel` that is dimensioned by `time` and that has `timelevels` as a related dimension (that is, for each value of the `time` dimension, `timelevelsre` contains a value of either `Month` or `Year`) When you want to limit the values of `time` that are already in status to only those values that are at the same level as `Jan99`, you can issue the following statement.

    LIMIT time TO LEVELREL timelevelsrel

## LIMIT command (using related dimension)

A LIMIT command with a related-dimension limit clause that uses the values of a different related dimension to assign values to a valueset or to set the status of a dimension or a dimension surrogate.

Syntax

LIMIT {dimension | valueset} limit-type related-dim-clause [IFNONE label]

where the syntax of related-dim-clause varies depending on the type of object being specified:

- When you want to specify a relation, the syntax is:

  RELATION relation-name [QUALIFY relation-dimension-name [inclusive-val-args...]...]

- When you want to specify a dimension that is related to the dimension being limited, the syntax is:

  related-dimension-name [related-dimension-valuelist]

  (You can also use this simplified syntax when the object is a a one-dimensional relation.)

Arguments

dimension

  The name of the dimension or dimension surrogate for which you are setting status.

valueset

  The name of the valueset for which you are assigning values.

concat-component

  The name of the component of the concat dimension whose values are used to determine the limit. (See the main entry for LIMIT command for complete description of this argument.)

limit-type

  A keyword that specifies how Oracle OLAP should modify the current status list. (See the main entry for LIMIT command for a list and descriptions of these keywords.)

RELATION relation-name

  Specifies that Oracle OLAP performs the limit based on the values of the relation specified by relation-name. This keyword must be specified if relation-name is a multidimensional relation. Also, when there is more than one relation between the dimension being limited and the dimension specified by related-dimension-name, you can use this phrase to identify which relation Oracle OLAP uses to perform the limit.

QUALIFY relation-dimension-name [inclusive-val-args]

  Identifies the values by which Oracle OLAP performs the limit, where:

  - relation-dimension-name is the name of a dimension of the relation specified by relation-name.

  - inclusive-val-args specifies the values of relation-dimension-name to use when determining the parent values. You can specify any inclusive valuelist argument as described in the syntax of the inclusive-val-args argument for the valuelist clause for LIMIT command (using values). When you omit this argument, Oracle OLAP uses the current status of the dimension when performing the limit.

related-dimension-name

  Specifies the name of a one-dimensional relation or a dimension that is related to the dimension being limited. For related-dimension-name, you can also specify a dimension surrogate for the dimension you are limiting, or a dimension surrogate of the related dimension. For example, `dimsurr` is a dimension surrogate of `dim2` and `dim2` is related to `dim1`. The dimension surrogate `dimsurr` has the values `Dsv1`, `Dsv2`, `Dsv3` and `Dsv4`. The following statement limits `dim1` by specifying values of `dimsurr`.

      LIMIT dim1 TO dimsurr dsv1 dsv3

related-dimension-valuelist

  The values of the related dimension or a dimension surrogate for the related dimension or the dimension specified using the syntax shown in LIMIT command (using values). When this argument is present in a LIMIT statement, status is obtained by selecting the values of the dimension being limited, which are related to the related-dimension values. When valuelist is omitted, the current status of related-dimension is used.

IFNONE label

  Specifies that program execution should branch to label when the requested status has null status or is based on a related dimension that turns out to have null status (that is, to have no values). (See the main entry for LIMIT command for complete description of this phrase.)

Notes

Limiting to a Related Dimension Is a Two-Step Process

When you limit a dimension or valueset to a related dimension, the resulting status is determined in a two-step process:

1. The dimension values are arranged in the order of the values of the related dimension.

2. When there is more than one value of the dimension for any value of the related dimension, those values are arranged in the order of their default status.

Suppressing the Sort When Limiting to a Related Dimension

You can suppress the sort that occurs when you limit a dimension or valueset to a related dimension by setting LIMIT.SORTREL to `NO`. This can significantly improve performance when the dimension you are limiting is large.

Note: When LIMIT.SORTREL is `NO`, printed output of a dimension may not appear in logical order.

Examples

Example 16-15 Limiting with a Related Dimension

Here the status of a dimension is limited using a related dimension. This statement limits `district` to `Boston` and `Atlanta`, which are in the `East` region.

    LIMIT district TO region 'East'

This statement limits `product` to `Sportswear` and `Footwear`, which are in the division that appears last in the list of `division` values.

    LIMIT product TO division LAST 1

## LIMIT command (using parent relation)

A LIMIT command that uses a parent relation in its limit clause to set the status of a hierarchical dimension or its dimension surrogate, or assigns values to a valueset, based on family relationships within the hierarchy.

Syntax

LIMIT {dimension | valueset} [concat-component] limit-type-

[family-keyword] USING parent-relation-clause [IFNONE label]

where:

- family-keyword has one of the following constructs:

  PARENTS
  CHILDREN
  ANCESTORS
  DESCENDANTS
  SIBLINGS
  TOPANCESTORS
  BOTTOMDESCENDANTS
  HIERARCHY [INVERTED] [NOORIGIN] [SKIP n] [DEPTH n] [RUN textexp]]

- The syntax for parent-relation-clause varies depending on its dimensionality of the object you want to specify:

  - When the parent relation is multidimensional you must use the following syntax:

    RELATION parent-relation-name [QUALIFY relation-dimension-name [inclusive-val-args...]...]

    (You can also use this syntax when the parent relation is one-dimensional.)

  - When the parent relation is one-dimensional, you can use the following simplified syntax:

    parent-relation-name [inclusive-val-args]

Arguments

dimension

  The name of the dimension or dimension surrogate for which you are setting status.

valueset

  The name of the valueset for which you are assigning values.

concat-component

  The name of the component of the concat dimension whose values are used to determine the limit. (See the main entry for LIMIT command for complete description of this argument.)

limit-type

  A keyword that specifies how Oracle OLAP should modify the current status list. (See the main entry for LIMIT command for a list and descriptions of these keywords.)

PARENTS

  Finds the parent of each value in valuelist. For a dimension, when there is no valuelist, finds the parent for each value in status. For a valueset, when there is no valuelist, it finds the parent of each value in the valueset. It uses the parent-relation to look up the parent.

CHILDREN

  Finds the children of each value in valuelist. For a dimension, when there is no valuelist, finds the children for each value in status. For a valueset, when there is no valuelist, it finds the children of each value in the valueset. It uses the parent-relation to look up the children.

ANCESTORS

  Finds the ancestors (that is, parents, grandparents, and so on) of each value in valuelist. For a dimension, when there is no valuelist, it finds the ancestors of each value in status. For a valueset, when there is no valuelist, it finds the ancestors of each value in the valueset. In other words it finds "parents" for the values and the "parents of the parents" until there are no new parents.

DESCENDANTS

  Finds the descendants (that is, children, grandchildren, and so on) of each value in valuelist. For a dimension, when there is no valuelist, it finds descendants for each value in status. For a valueset, when there is no valuelist, it finds the descendants of each value in the valueset. In other words, it finds the children of the values and the children of the children until there are no new children.

SIBLINGS

  Finds all siblings of each value in valuelist, including the valuelist values, themselves. Issuing one LIMIT statement with the SIBLIGS keyword is the same as issuing two consecutive LIMIT statements: 1) LIMIT with PARENTS, 2) LIMIT with CHILDREN. For a dimension, when there is no valuelist, it finds siblings for each value in status. For a valueset, when there is no valuelist, it finds the siblings of each value in the valueset.

TOPANCESTORS

  (Abbreviated TOPANC) Finds those members that are at the top of the hierarchy; that is, those members that do not have any ancestors. This is equivalent to issuing the following two LIMIT commands.

      LIMIT dimension to ANCESTORS ....
         LIMIT dimension REMOVE DESCENDANTS....

BOTTOMDESCENDANTS

  (Abbreviated BOTTOMDESC) Finds those members that are at the bottom of the hierarchy; that is, those members that do not have any descendants.

HIERARCHY

  Finds the descendants (that is, children, grandchildren, and so on) based on a particular parent-relation. The difference is the order of the values. DESCENDANTS groups the values by level (all children, then all grandchildren, and so on); HIERARCHY places each group of children next to its parent. HIERARCHY includes the original values (that is, those in status before the LIMIT statement was executed) in status.

INVERTED

  Indicates that children should be listed before their parents. By default, children are listed after their parents.

NOORIGIN

  Excludes the original values from the status. The default is to include original values.

SKIP

  Skips n generations for each value in valuelist. For dimensions, when there is no valuelist, it skips n generations for each value in status. For a valueset, when there is no valuelist, it skips n generations for each value in the valueset. This keyword, in combination with DEPTH, is helpful when drilling down; see Example 16-17, "Drilling Down Using SKIP and DEPT".

DEPTH

  Includes n generations down from each value of valuelist. For dimensions, when there is no valuelist, it includes n generations for each value in status. For a valueset, when there is no valuelist, it includes n generations of each value in the valueset. The default depth value is 99. This keyword, in combination with SKIP, is helpful when drilling down on values.

RUN

  Executes a statement, represented as a text expression, every time a group of children is constructed. For example, you can sort each group of children based on information stored in an Oracle OLAP variable. In the following statement, markets will be sorted in increasing order based on unit sales every time a group of children is constructed.

      LIMIT market TO HIERARCHY RUN 'SORT market a unit.m' USING -

      market.market

  Note: In this example, when you use KEEP or REMOVE instead of TO in your LIMIT statement, the SORT statement would have no effect.

USING

  Specifies the values to use when determining parent values.

parent-relation-name

  Specifies the name of a child-parent self-relation for the dimension. For each dimension value, the relation holds another value of the dimension which is its parent dimension value (the one immediately above it in a given hierarchy). To limit a dimension surrogate, use the parent relation for the dimension for which it is a surrogate.

RELATION

  Identifies the beginning of the parent-relation-clause. This keyword must be specified if parent-relation-name is a multidimensional relation.

QUALIFY relation-dimension-name

  Specifies the name of one of the dimensions of parent-relation-name.

inclusive-val-args

  Specifies the values to use when determining the parent values. You can specify any inclusive valuelist argument as described in the syntax of the inclusive-val-args argument for the valuelist clause for LIMIT command (using values).

IFNONE label

  Specifies that program execution should branch to label when the requested status has null status or is based on a related dimension that turns out to have null status (that is, to have no values). (See the main entry for LIMIT command for complete description of this phrase.)

Examples

Example 16-16 A Simple Drill Down

This example drills down on districts from the region level of the market dimension. First, the market dimension, which has embedded totals at the district, region, and total U.S. level, is limited to the region level data. This is done using the relation `mlv.market`, which is a relation between `marke`t and `market.level`.

Issuing a `REPORT mlv.market` statement produces the following output, which shows the values of `mlv.market`.

    MARKET         MLV.MARKET
    -------------- ----------
    Totus          Totus
    East           Region
    Boston         District
    Atlanta        District
    Central        Region
    Chicago        District
    Dallas         District
    West           Region
    Denver         District
    Seattle        District

The following LIMIT statement limits the values of `MARKET`, and the STATUS statement produces the values currently in status. The output of STATUS is shown following the statements.

    LIMIT market TO mlv.market 'Region'
    STATUS market

    The current status of MARKET is:
    EAST, CENTRAL, WEST

To drill down on the district level data from the region level, you can use LIMIT with the CHILDREN keyword. The following example uses a parent-relation called `market.market` to perform the drill down. For each value of the `market` dimension, this relation contains the name of its parent.

    DEFINE market.market RELATION market <market>
    LD Self-relation for the Market Dimension

A report of `market.market` produces the following output.

    MARKET         MARKET.MARKET
    -------------- -------------
    Totus          NA
    East           Totus
    Boston         Central
    Atlanta        East
    Central        Totus
    Chicago        Central
    Dallas         Central
    West           Totus
    Denver         West
    Seattle        West

You can limit `market` to the children of the `East`, `Central`, and `West` regions by using the CHILDREN keyword with LIMIT.

    LIMIT market TO mlv.market 'Region'
    Limit market TO CHILDREN USING market.market

A report of `market` produces the following output.

    MARKET
    -------------
    Boston
    Atlanta
    Chicago
    Dallas
    Denver
    Seattle

Example 16-17 Drilling Down Using SKIP and DEPT

Consider the following statement.

    LIMIT market TO HIERARCHY DEPTH 2 SKIP 1 USING market.market 'Totus'

Oracle OLAP will look in the child-parent relation (`market.market`) to find the children and the grandchildren (`DEPTH 2`) of `Totus` and it will discard the first generation (`SKIP 1`). The resulting status follows.

    Totus
    Boston
    Atlanta
    Chicago
    Dallas
    Denver
    Seattle

Note that `Totus` is included in status. With HIERARCHY, the original values are included in status.

## LIMIT command (NOCONVERT)

The LIMIT command sets the current status list of a dimension and its dimension surrogates, or assigns values to a valueset.

A LIMIT command with the NOCONVERT keyword sets the status of one dimension based on the numeric position of values in a different dimension.

Syntax

LIMIT{dimension | valueset} [concat-component] limit-type -

NOCONVERT [{unrelated-dimension|numeric-valueset}] -

[IFNONE label]

Arguments

dimension

  The name of the dimension or dimension surrogate for which you are setting status.

valueset

  The name of the valueset for which you are assigning values.

concat-component

  The name of the component of the concat dimension whose values are used to determine the limit. (See the main entry for LIMIT command for complete description of this argument.)

limit-type

  A keyword that specifies how Oracle OLAP should modify the current status list. (See the main entry for LIMIT command for a list and descriptions of these keywords.)

NOCONVERT

  Sets the status of a dimension based on the numeric position of the specified values in the status list of an another dimension.

unrelated-dimension

  Specifies the name of a dimension not related to the dimension being limited. Using this argument specifies that the status of a dimension or valueset is set based on the numeric position of each value in status of the unrelated-dimension. This is particularly useful when the two dimensions are in different analytic workspaces (for example, when a one-to-one correspondence exists between the product dimension in two analytic workspaces)

numeric-valueset

  Specifies the a numeric valueset. When you use this argument, NOCONVERT sets the status based on the numeric values in the valueset. The numeric values represent the positions of the values in the default status of the dimension.

IFNONE label

  (For use only within an OLAP DML program) Specifies that program execution should branch to label when the requested status has null status or is based on a related dimension that turns out to have null status (that is, to have no values). (See the main entry for LIMIT command for complete description of this phrase.)

## LIMIT command (using POSLIST)

The LIMIT command sets the current status list of a dimension and its dimension surrogates, or assigns values to a valueset.

A LIMIT command with the POSLIST keyword sets the status of a dimension based on the position of the values within that dimension.

Syntax

LIMIT {dimension | valueset} [concat-component] limit-type -

POSLIST poslist-exp [IFNONE label]

Arguments

dimension

  The name of the dimension or dimension surrogate for which you are setting status.

valueset

  The name of the valueset for which you are assigning values.

concat-component

  The name of the component of the concat dimension whose values are used to determine the limit. (See the main entry for LIMIT command for complete description of this argument.)

limit-type

  One of the standard keywords (documented in the main entry for LIMIT command) that specifies how Oracle OLAP should modify the current status list.

POSLIST poslist-textexp

  Sets the status of a dimension based on the position of a value within a dimension. poslist-textexp is a text expression, each line of which is a numeric value that evaluates to a numeric position of the dimension being limited.

IFNONE label

  Specifies that program execution should branch to label when the requested status has null status or is based on a related dimension that turns out to have null status (that is, to have no values). (See the main entry for LIMIT command for complete description of this phrase.)